俺得フロントエンド (1) LT会
https://gyazo.com/cd101c7134ce6e58bc51b393e399f500
https://opt.connpass.com/event/130433/
オレオレ cli スクリプトでフロントエンド全社 JS 基盤の治安を直して得した
https://www.slideshare.net/euxn/20190612-oretokufrontend-justiceforfrontend
euxn23
BitBank
発端
yarnじゃない理由
歴史的経由
git+sshなのでyarnが使えない
npm enterprise
npmがよくわからん
やること
全依存関係取得
cloneする
再起依存を解除する
GHQをつかうと楽
非同期並列数制御にbluebirdのPromise.map()が便利
readdirRecursivelySyncFlatten が便利
reduceはしばらくすると自分も読むのがつらい
とはいえI/Fの型が書いてるので便利
package.jsonの対応表をつくると楽
再帰コードもTSだとよい
reduceと組あわせるのはつらい
統合可能性の調査
殲滅対象がわかったのでそれらを/src/node_modules にぶちこんだ
CTOから許可もらった
依存順を確認
依存が固定の場合はどうする?
社内libはキャレットを許容する
peerDepじゃないと不安、ロックしたい
残ったパッケージの依存関係整理
浅い順からnpm enterprise化
アプリケーションに反映
100パッケージのgit HEAD参照を解消しって7階層の依存を解消した
GitHub.icon https://github.com/euxn23/nlfe
結果
HEADのは快適変更でのバグ回避
承認のCDフローの確立
Node6 EOL対応が楽になった
アプリドメイン完全に理解した
俺得なwebpack pluginsの紹介
https://speakerdeck.com/mukai21/an-de-nawebpack-pluginsfalseshao-jie
sakito
サイボウズ株式会社
株式会社Kaizen Platform フロントエンドアドバイザー
公式にのってない便利なプラグイン
error-overlay-webpack-plugin
https://github.com/smooth-code/error-overlay-webpack-plugin
creat-react-appを使ってる人はわかる
注意:単一エントリーの場合はエラーになるかも
progress-bar-webpack-plugin
https://github.com/clessg/progress-bar-webpack-plugin
ローディング状況の可視化
Speed measure plugin
https://github.com/stephencookdev/speed-measure-webpack-plugin
ビルド速度を測定する
webpack-config-plugins
https://github.com/namics/webpack-config-plugins
loaderに関する設定のベストプラクティス集
zero-configで完結可能
webpack-notifier
https://github.com/Turbo87/webpack-notifier
ビルドが失敗した時の通知
fork-ts-checker-notifier-webpack-plugin
https://github.com/Realytics/fork-ts-checker-webpack-plugin
型エラーの通知版
ForkTsCheckerWebpackPluginを先に読む
v1系である必要
preload-webpack-plugin
https://github.com/GoogleChromeLabs/preload-webpack-plugin
preloadやprefetchできるプラグイン
4.6.0以降は不要
copy-webpack-plugin
https://github.com/webpack-contrib/copy-webpack-plugin
指定ファイルやディレクトリをコピーしてくれる
画像のディレクトリをバンドルされるdistにコピー
pathが指定できる
imagemin plugins
https://github.com/Klathmon/imagemin-webpack-plugin
画像圧縮
devではOFFにする
webpack-libs-optimizations
https://github.com/GoogleChromeLabs/webpack-libs-optimizations
moment.jsやloadshのファイルサイズをbabelやwebpackで削る手法が紹介されてる
タイガー&ドラゴン
4245Ryomt
SPA歴=エンジニア歴
SPAにつかれたので愚痴を聞いてくれ
なぜやるのか?
サーバーサイドからクライアント事情を切り離す
画面真っ白うざい
リッチUI
サーバーサイドの負荷を減らす
リクエスト数が減る?
キャッシュするとバグになりかねない
SPAで作ったほうが早い
壊れる状態
意図しないリモートのデータの組み合わせで起きる
起きないように気をつける
データフェッチし忘れ
削除されてるデータを持ってる場合は?
更新したらどこまで追従する?
間違っちゃったで壊れる
コンパイラは助けてくれない
テストをちゃんとかいてないとfetch系を呼び出してくるのはしんどい
整合性保つのは大変
なぜ難しいのか?それがSPAだから
トップレベルに並べられるリモートソースの状態
徐々に辛くなる状態構成
リソースにページングがきたらつらい
種類/関連がパッと見でわからない
viewと分離されてるとはいえ色んな文脈で操作される
どうすればいいのか?
トップレベルにリソースならべるのはやめる
共通ロジックと状態の居場所は関係ない
むしろ蜜にならないモジュール化
ページごとにリソースも状態をわける
伝えたかったこと
SPAのベストプラクティスは自分たちのアプリに当てはまるとはいえない
状態構造/ライブラリに依存しないモジュール化
要件や構造によってかわる状態構造はあうようにしよう
Elmはいいぞ
外部ライブラリもインストール・型解釈できるTypeScript Playgroudを作った
https://talks.leko.jp/advanced-typescript-playground/
L_e_k_o
株式会社CureApp
TypeScript Playground
https://www.typescriptlang.org/play/
GitHub.icon https://github.com/Leko/type-puzzle
ブラウザだけで完結するTypeScriptのPlayground
ちょっとコード書いて型を試すのに便利
transpile結果も簡単に確認できる
シェア機能で型パズルの出題やTipsの共有も便利
型周りもうひと押しほしい 🤔
npmモジュール(@types etc)も絡めて型を確かめたいことがある
React.js, redux, reselect etc...
tsconfig.jsonを直接いじりたい、それもシェアされてほしい
非公式TypeScript playgroundを作った
https://playground.type-puzzle.org
型のチェックだけ、実行はできない
@typesやTS製npmモジュールをインストールし型解釈できる
tsconfig.jsonをフル※カスタマイズ可能
内部技術ピックアップ
monaco-editor 内部の TypeScript の LanguageService
monaco-editor に npm パッケージの型定義を読み込ませる
npm パッケージの検索
npm パッケージ(型定義ファイル)のインストール
Monaco Editor と TypeScript
GitHub.icon https://github.com/microsoft/monaco-typescript
monaco-editorにはブラウザ用にインターフェースを実装したts LanguageServiceが入っている
monaco.Uriで仮想的なfileプロトコルをしゃべれる
npm moduleのインストール
参考実装:Babel repl
Algolia
高速でフルマネージドな全文検索エンジン(のWebサービス)
https://github.com/algolia/npm-search
npm registryのレプリカをAlgoliaに構築
https://github.com/algolia/react-instantsearch
AlgoliaのAPIクライアント + UI
多くのOSSのドキュメントのサイト内検索もこれ
とても高速。大量のレコード管理はちょっとお高い
npm Public Registry API
npm/registry
(Archiveされてるけど)npm registryのAPIドキュメント
おおまかな実装方針
1. 何かしらのAPIでnpmパッケージを検索
2. 選択されたパッケージのtarballをnpm registryからfetchし解凍
tarballとCORSの壁
https://github.com/npm/npm-registry-couchapp/issues/108#issuecomment-174095040
3. package.jsonを読み依存ツリーを全探索
4. monacoに読み込ませる
monaco に npm moduleの型を読ませる
編集中のコードの仮想的なパスを指定(ex. /index.tsx)
.d.tsのコード(string)を手に入れる
型解釈されるように配置(ex. /node_modules/xxx/index.d.ts)
任意のnpmモジュールのimportが型解釈が可能に!
詳細な仕様はTypeScript handbookやDefinitelyTypedのREADMEを参照
UNPKG
https://unpkg.com
{package}@{version}/{path} → npm publishされたファイルの中身
かゆいところに手が届く機能いろいろ
CDNが手前にあるのでとても高速
CORSいける
パッケージの中身の取得
unpkg.comではパッケージ内の全ファイル一覧を取れる
https://github.com/unpkg/unpkg.com/issues/69
不要なファイルも取得するので遅いがパス解決不要
Service Worker runtime cachingである程度効率化できる
1つ1つとってくるのは非効率
https://gyazo.com/733b30463585f3881ace04d15c7ba14e
依存pkgの依存pkgのバージョン解決
UNPKGがsemverを解決してリダイレクトしてくれる
@types/react/
index.d.ts
node_modules/csstype/index.d.ts
他に使ってる技術
ブラウザでgzipかけてURLを圧縮・解凍
comlink-workerでのお手軽off the main thread
今後
Hooks 版 react-redux 使ってみよう
フィードバックもらって完成度あげたい
import のパスやパッケージ名の補完が効くように
本家monaco-typescriptのCompletionProviderを改善したい
公式 playground に還元したい
得してほしい情報
monacoとTypeScriptの成熟によりブラウザエディタが(私の中で)アツい
UNPKGは開発用途で可能性感じる
ちょっと複雑な型遊びがしたかったら、
Figma APIで便利ツールを作ろう
https://speakerdeck.com/takanorip/make-some-useful-tools-with-figma-api
takanorip
株式会社FOLIO
https://csb-bw450.netlify.com/
TOKENとファイルのキーを突っ込むとコンポーネントのURL一覧を書き出してくれる
技術
React.js
TypeScript
Hooksを使ってみた
Figma API
figma-js
https://github.com/jongold/figma-js
Little wrapper(+types)for the Figma API
型定義がバッチリ
中身はaxios
TODO
Authentication対応
URL一覧のダウンロード
エラーメッセージがない
おまけ
FigmaにPlugin Betaが来た
利用申し込みする必要あり
Live Embedが便利
https://www.figma.com/developers/embed
iframeでデザインデータのプレビューを埋め込める
TrelloのPower Upに対応
https://trello.com/power-ups/59b2e7611e6ece0b35eac16a
実践ReasonReact
cedretaber
Telecomunication
ReasonReact
https://reasonml.github.io/reason-react/
Facebook製のAltJS
OCaml
JSXが使える
多相バリアント
JSのメソッド呼び出しができる
まとめ
Firebaseはすごい
型は定義しないといけない
おすすめ
OCaml, JavaScript, React.jsに精通してる人
型安全に書きたいけど既存の資産は使いたい
使って欲しい人
ML系言語の経験がない人むけ
関数型言語に興味あるけど何から始めるべきか迷ってる人
Lighthouse performance 100点のサイトから0点を目指す
https://kashira2339.github.io/slides-frontend-performance/
kashira2339
CyberBuzz, Inc.
やったこと
1. Service Worker をオフにする
2. Cache-Control をオフにする
ngnixを使用してる
3. gzip 圧縮を off にする
4. Component の Lazy load での Code splitting を off にする
5. コード圧縮を off にする
ファイルサイズ
142KB → 7782KB(54 倍) へ
スピード
First Contentful Paint が 0.3 → 41.5s (138 倍)へ
まとめ: Performance 0 を目指すために
ファイルサイズを増やす = 読み込むデータ量を増やすと効果に直結
gzip、コード分割、minify をやめるとファイルサイズ増大
高画質画像を元画像のまま活用することも効果が期待できる
大は小を兼ねる!
100 点のときと 0 点の時とでは表示までに体感できるほどの差がある
会社設備の高速な回線だと見過ごしがち
ユーザーはスマホが大半だったりキャリア回線も多い
モバイルユーザーはページ表示に 3 秒待てないと言われている
現代人には余裕が必要
3G ならゆっくりお茶を飲むことも可能!
Progressive HydrationをNext.jsで使いたい
remsleep_zzz
CyberBuzz, inc.
https://twitter.com/9almondchocola
Hydrationとは
SSRで生成したコンテンツをCSRで使い回すこと
メリット
SSRとの組み合わせで画面遷移してからのコンテンツ描画時間を減らす
Progressive Hydration
段階的にHydrationに行う
ページ操作が可能になる時間を短縮する
快適なUXを行う